package br.com.furb.trabalhoFinal.model;

import java.io.Serializable;
import java.text.DecimalFormat;
import java.util.List;

public class Marcacoes implements Serializable {

  private List<Integer> marcacoes;

  public Marcacoes(List<Integer> marcacoes) {
    super();
    this.marcacoes = marcacoes;
  }

  public Marcacoes() {
  }

  public List<Integer> getMarcacoes() {
    return marcacoes;
  }

  public void setMarcacoes(List<Integer> marcacoes) {
    this.marcacoes = marcacoes;
  }

  public void adicionarMarcacao(int marcacao) {
    marcacoes.add(marcacao);
  }

  public int percToMin(int perc) {
    int ret = 0;
    ret = (int) Math.floor((60 * perc) / 100);
    return ret;
  }

  public int minToPerc(int min) {
    int ret = 0;
    ret = (int) Math.floor((100 * min) / 60);
    return ret;
  }

  public String horaParaString(int hor) {
    String ret = "00:00";
    DecimalFormat formatacao = new DecimalFormat("0.00");
    String num;
    num = String.valueOf(formatacao.format((float) hor / 60));
    if (num.contains(".")) {
      String minu;
      String hora;
      hora = String.copyValueOf(num.toCharArray(), 0, num.indexOf(".") - 1);
      minu = String.copyValueOf(num.toCharArray(), num.indexOf(".") + 1, num.length());
      minu = String.valueOf(percToMin(Integer.parseInt(minu)));
      ret = hora + ":" + minu;
    } else {
      if (Integer.parseInt(num) == 0) {
        return "00:00";
      }
      while (Integer.parseInt(num) > 24) {
        num = String.valueOf(Integer.parseInt(num) - 24);
      }
      num = num + ":00";
      ret = num;
    }
    return ret;
  }

  public int stringParaHora(String hor) {
    int ret = 0;
    String hora;
    String minu;
    if (hor.contains(":")) {
      hora = hor.copyValueOf(hor.toCharArray(), 0, hor.indexOf(":") - 1);
      minu = hor.copyValueOf(hor.toCharArray(), hor.indexOf(":") - 1, hor.length());
      minu = String.valueOf(minToPerc(Integer.parseInt(minu)));
      ret = (int) Math.floor(Float.parseFloat(hora + "." + minu) * 60);
    }
    return ret;
  }

  public void limpaMarcacoes() {
    marcacoes.clear();
  }

  public int getMarcacaoPos(int pos) {
    int ret = 0;
    if (pos <= marcacoes.size()) {
      ret = marcacoes.get(pos);
    } else {
      ret = -1;
    }
    return ret;
  }

  public int getPosMarcacao(int val) {
    int ret = -1;
    for (int i = 0; i < marcacoes.size(); i++) {
      if (marcacoes.get(i) == val) {
        ret = marcacoes.get(i);
      }
    }
    return ret;
  }

  @Override
  public boolean equals(Object obj) {
    if (obj instanceof Marcacoes) {
      Marcacoes other = (Marcacoes) obj;
      if (getMarcacoes().size() != other.getMarcacoes().size()) {
        return false;
      }
      int i = 0;
      while (i < getMarcacoes().size() && getMarcacoes().get(i).intValue() == other.getMarcacoes().get(i).intValue()) {
        i++;
      }
      return (i == getMarcacoes().size());
    }
    return false;
  }
}